'use strict'
const path = require('path')
function resolve(dir) {
  return path.join(__dirname, dir)
}
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
const CompressionPlugin = require('compression-webpack-plugin') // 开启gzip压缩
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i // 开启gzip压缩
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin // 打包分析

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  publicPath: process.env.VUE_APP_BASE_PATH ? process.env.VUE_APP_BASE_PATH : '/', // 公共路径
  outputDir: 'dist', // 'dist', 生产环境构建文件的目录
  assetsDir: 'static', // 相对于outputDir的静态资源(js、css、img、fonts)目录
  lintOnSave: false, // 关闭编译时的ESLint检查
  productionSourceMap: false, // 生产环境的 source map

  devServer: {
    host: '0.0.0.0',
    port: 8080,
    open: true,
    historyApiFallback: true,
    proxy: {
      // [process.env.VUE_APP_BASE_API]: {
      //   target: `https://tsxfxh.etianshui.com/API`,
      //   changeOrigin: true,
      //   pathRewrite: {
      //     ['^' + process.env.VUE_APP_BASE_API]: ''
      //   }
      // },
      '/api': {
        target: 'https://tstj.etianshui.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      },
      '/': {
        target: 'https://source.unsplash.com',
        changeOrigin: true,
        pathRewrite: {
          '^/': ''
        }
      },
    },
    // 允许访问的主机
    allowedHosts: [
      // 'localhost',// 允许本地访问
      'all' // ✅ 特殊值，允许所有主机
    ],
  },

  css: {},
  configureWebpack: {
    resolve: {
      alias: {
        '@': resolve('src')
      }
    },
    plugins: [
      // 使用gzip解压缩静态文件
      // new CompressionPlugin({
      //   test: /\.(js|css|html)?$/i, // 匹配的文件类型
      //   filename: '[path].gz[query]', // 压缩后的文件名格式
      //   algorithm: 'gzip', // 压缩算法
      //   deleteOriginalAssets: false, // 是否删除原文件
      //   threshold: 10240, // 只处理大于10KB的文件
      //   minRatio: 0.8 // 压缩比达到0.8才进行压缩
      // })
    ],
  },
  chainWebpack: config => {
    // 在生产环境下配置
    if (process.env.NODE_ENV === 'production') {
      config.plugin('compression')
        .use(CompressionPlugin, [{
          algorithm: 'gzip',
          test: /\.(js|css|html|svg)$/,
          threshold: 10240,
          minRatio: 0.8
        }]);
    }
  },
})
